package bufferedstream01;

import java.io.BufferedOutputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

/*
BufferedOutputStream类：
      该类实现缓冲的输出流，缓冲的目的就是为了提高写效率
 构造方法：
     BufferedOutputStream(OutputStream out)
          创建一个新的缓冲输出流，以将数据写入指定的底层输出流。

 成员方法：
     void flush()
          刷新此缓冲的输出流。
     public void write(byte[] b)
          将 b.length 个字节写入此输出流。
     void write(byte[] b, int off, int len)
          将指定 byte 数组中从偏移量 off 开始的 len 个字节写入此缓冲的输出流。
     void write(int b)
          将指定的字节写入此缓冲的输出流。

  BufferedOutputStream原理：
      他底层其实会开辟一个默认长度为8192字节数组，为了提高效率
      但是我们write()方法会把字节写入到底层字节数组中，只有通过刷新或者关流，才能将字节数组中的字节刷到文件中去

 */
public class BufferedOutputStream01 {
    public static void main(String[] args) throws IOException {
        //method01();
        //method02();
        BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("Day23/8.txt"));

        byte[] bytes = "abcdef".getBytes();
        bos.write(bytes, 2, 3);

        bos.close();

    }

    private static void method02() throws IOException {
        BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("Day23/8.txt"));

        bos.write("abc".getBytes());

        bos.close();
    }

    private static void method01() throws IOException {
        //1.利用FileOutputStream关联一个文件
        FileOutputStream fos = new FileOutputStream("Day23/7.txt");
        //2.将fos流通过构造方法传给BufferedOutputStream，相当于 BufferedOutputStream对FileOutputStream进行包装
        BufferedOutputStream bos = new BufferedOutputStream(fos);
        //3.写一个字节
        bos.write(97);

        bos.flush();//将底层字节数组中的字节刷到文件中

        //4.关流释放资源
        bos.close();//底层会先将字节数组中的数据刷新到文件中，然后再关流释放资源
    }
}
